//package org.example.common.userinfo;
//
//import cn.hutool.core.collection.CollectionUtil;
//import cn.hutool.core.util.StrUtil;
//import org.example.common.bean.CommonException;
//import org.example.common.bean.ResponseBean;
//import org.example.common.constant.Constants;
//import org.example.common.enums.ErrorEnum;
//import org.example.common.feign.inner.jiangsu.userinfo.UserBean;
//import org.example.common.feign.inner.jiangsu.userinfo.UserInfoFeign;
//import com.njwx.yq.util.JwtTokenUtil;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.http.HttpHeaders;
//import org.springframework.stereotype.Service;
//import org.springframework.web.context.request.RequestContextHolder;
//import org.springframework.web.context.request.ServletRequestAttributes;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.Collections;
//import java.util.List;
//import java.util.Objects;
//import java.util.Set;
//
///**
// * 用于查询当前用户信息
// * 用户名，用户ID，用户角色，用户机构，用户详细信息，用户权限等
// *
// * @author dingcan
// * @since 2022-04-15 10:10
// */
//@Service
//@RequiredArgsConstructor
//@Slf4j
//public class UserService {
//
//    private final UserInfoFeign userInfoFeign;
//    private static final String ROLES = "roles";
//
//    /**
//     * 当前token对应的用户名称
//     *
//     * @return String
//     */
//    public static String currentUserName() {
//        if (noRequestContext()) {
//            return StringUtils.EMPTY;
//        }
//        HttpServletRequest request = getHttpRequest();
//        String accessToken = getAccessToken(request);
//        if (StrUtil.isBlank(accessToken)) {
//            return StringUtils.EMPTY;
//        }
//        String userName = JwtTokenUtil.getUserName(accessToken);
//        if (StrUtil.isNotBlank(userName)) {
//            return userName;
//        }
//        String username = JwtTokenUtil.getParam(accessToken, Constants.MDC_USERNAME);
//        if (StrUtil.isNotBlank(username)) {
//            return username;
//        }
//        return JwtTokenUtil.getClientId(accessToken);
//    }
//
//    public static String currentClientId() {
//        if (noRequestContext()) {
//            return StringUtils.EMPTY;
//        }
//        HttpServletRequest request = getHttpRequest();
//        String accessToken = getAccessToken(request);
//        if (StrUtil.isBlank(accessToken)) {
//            return StringUtils.EMPTY;
//        }
//        return JwtTokenUtil.getClientId(accessToken);
//    }
//
//    /**
//     * 当前token对应的用户ID
//     *
//     * @return 当前用户的ID
//     */
//    public static String currentUserId() {
//        if (noRequestContext()) {
//            return StringUtils.EMPTY;
//        }
//        HttpServletRequest request = getHttpRequest();
//        String accessToken = getAccessToken(request);
//        if (StrUtil.isBlank(accessToken)) {
//            return StringUtils.EMPTY;
//        }
//        return JwtTokenUtil.getUserId(accessToken);
//    }
//
//    /**
//     * 当前token对应的用户的机构ID
//     *
//     * @return 机构ID
//     */
//    public static String currentUserOrgId() {
//        if (noRequestContext()) {
//            return StringUtils.EMPTY;
//        }
//        HttpServletRequest request = getHttpRequest();
//        String accessToken = getAccessToken(request);
//        if (StrUtil.isBlank(accessToken)) {
//            return StringUtils.EMPTY;
//        }
//        return JwtTokenUtil.getOrgId(accessToken);
//    }
//
//
//    /**
//     * 当前token对应的用户角色列表
//     *
//     * @return token 中遍入的岗位代码
//     */
//    public static List<String> currentUserRoles() {
//        if (noRequestContext()) {
//            return Collections.emptyList();
//        }
//        HttpServletRequest request = getHttpRequest();
//        String accessToken = getAccessToken(request);
//        if (StrUtil.isBlank(accessToken)) {
//            return Collections.emptyList();
//        }
//        List<String> roles = JwtTokenUtil.getJobs(accessToken);
//
//        if (CollectionUtil.isEmpty(roles)) {
//            roles = JwtTokenUtil.getList(accessToken, ROLES);
//        }
//        return roles;
//    }
//
//    /**
//     * 系统名称
//     *
//     * @return 系统代码
//     */
//    public static String currentBusinessName() {
//        if (noRequestContext()) {
//            return StringUtils.EMPTY;
//        }
//        HttpServletRequest request = getHttpRequest();
//        String businessName = request.getHeader(Constants.BUSINESS_NAME);
//        if (StrUtil.isNotBlank(businessName)) {
//            return businessName;
//        }
//        String accessToken = getAccessToken(request);
//        return JwtTokenUtil.getSystemCode(accessToken);
//    }
//
//
//    /**
//     * 无需查询用户详情的需求时，该方法可移除
//     *
//     * @return 当前用户信息
//     */
//    public UserBean currentUserInfo() {
//        ResponseBean<UserBean> userInfo = userInfoFeign.getUserInfo();
//        if (userInfo.getCode() != ErrorEnum.SUCCESS.getErrorCode()) {
//            throw new CommonException("查询用户信息失败,请重试");
//        }
//        return userInfo.getData();
//    }
//
//    /**
//     * 无需查询用户详情的需求时，该方法可移除
//     *
//     * @return 岗位代码
//     */
//    public Set<String> currentUserPermissions() {
//        Set<String> permissions = currentUserInfo().getPermissions();
//        if (CollectionUtil.isEmpty(permissions)) {
//            return Collections.emptySet();
//        }
//        return permissions;
//    }
//
//    public static String getAccessToken(HttpServletRequest request) {
//        String accessToken = request.getHeader(HttpHeaders.AUTHORIZATION);
//        if (StrUtil.isNotBlank(accessToken)) {
//            accessToken = accessToken.trim();
//            if (accessToken.contains(StringUtils.SPACE)) {
//                String[] temp = accessToken.split(StringUtils.SPACE, -1);
//                accessToken = temp[temp.length - 1];
//            }
//        }
//        return accessToken;
//    }
//
//    /**
//     * 获取Servlet请求上下文的HttpRequest对象。
//     *
//     * @return 请求上下文中的HttpRequest对象。
//     */
//    public static HttpServletRequest getHttpRequest() {
//        return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
//    }
//
//    /**
//     * 获取Servlet请求上下文的HttpResponse对象。
//     *
//     * @return 请求上下文中的HttpResponse对象。
//     */
//    public static HttpServletResponse getHttpResponse() {
//        return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getResponse();
//    }
//
//    /**
//     * 判断当前是否处于HttpServletRequest上下文环境。
//     *
//     * @return 是返回true，否则false。
//     */
//    public static boolean hasRequestContext() {
//        return RequestContextHolder.getRequestAttributes() != null;
//    }
//
//    /**
//     * 判断当前是否处于HttpServletRequest上下文环境。
//     *
//     * @return 是返回false，否则true。
//     */
//    public static boolean noRequestContext() {
//        boolean result = RequestContextHolder.getRequestAttributes() == null;
//        if (result) {
//            log.warn("current env is not HttpServletRequest context!!");
//        }
//        return result;
//    }
//
//}
